from PIL import Image
import os
import time

def resize_to_1inch(input_folder, output_folder):
    print("=" * 50)
    print("📸 1寸照片批量转换工具")
    print("=" * 50)
    
    # 检查输入文件夹是否存在
    if not os.path.exists(input_folder):
        print(f"❌ 错误：找不到输入文件夹 '{input_folder}'")
        print("请确保 'images' 文件夹存在并包含照片文件")
        input("按回车键退出...")
        return
    
    # 确保输出文件夹存在
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
        print(f"✅ 已创建输出文件夹: {output_folder}")

    # 1寸照片尺寸（像素，300dpi）
    target_size = (295, 413)  # 2.5cm × 3.5cm at 300dpi
    print(f"📏 目标尺寸: {target_size[0]} × {target_size[1]} 像素 (1寸照片)")

    # 支持的图片格式
    valid_extensions = ('.jpg', '.jpeg', '.png')

    # 获取所有图片文件
    image_files = [f for f in os.listdir(input_folder) if f.lower().endswith(valid_extensions)]
    
    if not image_files:
        print(f"❌ 在 '{input_folder}' 文件夹中没有找到支持的图片文件")
        print(f"支持的格式: {', '.join(valid_extensions)}")
        input("按回车键退出...")
        return
    
    print(f"📁 找到 {len(image_files)} 张图片待处理")
    print("-" * 50)
    
    success_count = 0
    error_count = 0

    # 遍历输入文件夹
    for i, filename in enumerate(image_files, 1):
        try:
            print(f"[{i}/{len(image_files)}] 正在处理: {filename}")
            
            # 打开图片
            img_path = os.path.join(input_folder, filename)
            img = Image.open(img_path)
            
            # 转换为RGB模式（处理PNG等格式）
            if img.mode != 'RGB':
                img = img.convert('RGB')

            # 计算调整后的尺寸，保持宽高比
            img_ratio = img.width / img.height
            target_ratio = target_size[0] / target_size[1]
            
            if img_ratio > target_ratio:
                # 图片较宽，以高度为准
                new_height = target_size[1]
                new_width = int(new_height * img_ratio)
            else:
                # 图片较高，以宽度为准
                new_width = target_size[0]
                new_height = int(new_width / img_ratio)
            
            # 调整图片大小
            img = img.resize((new_width, new_height), Image.LANCZOS)
            
            # 居中裁剪到目标尺寸
            left = (new_width - target_size[0]) // 2
            top = (new_height - target_size[1]) // 2
            right = left + target_size[0]
            bottom = top + target_size[1]
            
            img = img.crop((left, top, right, bottom))

            # 保存到输出文件夹
            output_filename = filename
            if filename.lower().endswith('.png'):
                output_filename = output_filename.replace('.png', '.jpg')
            
            output_path = os.path.join(output_folder, output_filename)
            img.save(output_path, quality=95)
            
            success_count += 1
            print(f"    ✅ 转换成功: {output_filename}")

        except Exception as e:
            error_count += 1
            print(f"    ❌ 处理失败: {e}")

    print("-" * 50)
    print("🎉 批量转换完成！")
    print(f"✅ 成功转换: {success_count} 张")
    if error_count > 0:
        print(f"❌ 转换失败: {error_count} 张")
    
    print(f"📁 输出文件夹: {output_folder}")
    print("=" * 50)
    
    # 等待用户确认
    input("按回车键退出...")

if __name__ == "__main__":
    # 输入和输出文件夹路径
    input_folder = "images"  # 从images文件夹读取
    output_folder = "photos"  # 保存到photos文件夹
    
    try:
        resize_to_1inch(input_folder, output_folder)
    except KeyboardInterrupt:
        print("\n\n⚠️ 用户中断操作")
        input("按回车键退出...")
    except Exception as e:
        print(f"\n❌ 程序运行出错: {e}")
        input("按回车键退出...")